package com.authentication.code;

import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationCodeRequestAuthenticationToken;

public interface AuthenticationCodeRepository {

    /**
     * 存储 {@link Authentication} 并返回一个与之对应的 code
     *
     * @param userAuthentication        要存储的用户认证信息
     * @param clientAuthenticationToken
     * @param grantedScopes
     * @return code
     */
    String storageCode(Authentication userAuthentication, OAuth2AuthorizationCodeRequestAuthenticationToken clientAuthenticationToken, String[] grantedScopes);

    /**
     * 通过用户 的 code 取得 上一次认证成功的 用户信息
     * @param code
     * @return 已经认证用户信息
     */
    ClientAndUserAuthenticationPair get(String code);
}
